
angular.module("googleMap",[]).
    directive('ngMap', function() {
        return {
            restrict: 'E',
            replace: true,
            template: '<div></div>',
            link: function (scope, element, attrs) {
                console.log(element);

                //GoogleMap
                //var myOptions = {zoom: 6,mapTypeId: google.maps.MapTypeId.ROADMAP};scope.map = new google.maps.Map(document.getElementById(attrs.id), myOptions);google.maps.event.addListener(scope.map , 'click', function (e) {scope.$apply(function () {addMarker({lat: e.latLng.lat(),lng: e.latLng.lng()});console.log(e);});}); // end click listener
                //scope.getGeoCode("경기도 남양주시 조안면 삼봉리 279", "평화");scope.getGeoCode("경기도 시흥시 목감동 산호아파트", "집");
                //addMarker = function (pos) {var myLatlng = new google.maps.LatLng(pos.lat, pos.lng);var marker = new google.maps.Marker({position: myLatlng,map: scope.map ,title: "Hello World!"});} //end addMarker




                var oSeoulCityPoint = new nhn.api.map.LatLng(37.497978,127.027703); //강남역 좌표값 ( 위도, 경도 )
                var defaultLevel = 4;
                scope.map = new nhn.api.map.Map(document.getElementById(attrs.id), {
                    point : oSeoulCityPoint,
                    zoom : defaultLevel,
                    enableWheelZoom : true,
                    enableDragPan : true,
                    enableDblClickZoom : false,
                    mapMode : 0,
                    activateTrafficMap : false,
                    activateBicycleMap : false,
                    minMaxLevel : [ 1, 14 ],
                    size : new nhn.api.map.Size(800, 480)        });

                scope.oLabel = new nhn.api.map.MarkerLabel(); // - 마커 라벨 선언.
                scope.map.addOverlay(scope.oLabel);


                scope.mapInfoTestWindow = new nhn.api.map.InfoWindow(); // - info window 생성
                scope.mapInfoTestWindow.setVisible(false); // - infowindow 표시 여부 지정.
                scope.map.addOverlay(scope.mapInfoTestWindow);	// - 지도에 추가.

               scope.getGeoCode("경기도 남양주시 조안면 삼봉리 279", "평화 수상레저");
               scope.getGeoCode("경기도 남양주시 조안면 삼봉리 260", "삼봉 수상레저");

                scope.getGeoCode("경기도 남양주시 화도읍 구암리 98-2","구암레저클럽");
                scope.getGeoCode("경기 남양주시 화도읍 구암리 21-1","오동나무 수상레져");
                scope.getGeoCode("경기 남양주시 화도읍 금남리 623-1","하이마트수상레저");

                scope.getGeoCode("경기 남양주시 화도읍 금남리 132-21","삼영수상레저");
                scope.getGeoCode("경기 남양주시 화도읍 금남리 152-1","가람보트장");



                scope.map.attach('mouseenter', function(oCustomEvent) {
                    var oTarget = oCustomEvent.target;
                    // 마커위에 마우스 올라간거면
                    if (oTarget instanceof nhn.api.map.Marker) {
                        var oMarker = oTarget;
                        scope.oLabel.setVisible(true, oMarker); // - 특정 마커를 지정하여 해당 마커의 title을 보여준다.
                    }
                });

                scope.map.attach('mouseleave', function(oCustomEvent) {
                    var oTarget = oCustomEvent.target;
                    // 마커위에서 마우스 나간거면
                    if (oTarget instanceof nhn.api.map.Marker) {
                        scope.oLabel.setVisible(false);
                    }
                });


                scope.map.attach('click', function(oCustomEvent) {
                    var oPoint = oCustomEvent.point;
                    var oTarget = oCustomEvent.target;
                    scope.mapInfoTestWindow.setVisible(false);

                    // 마커 클릭하면
                    if (oTarget instanceof nhn.api.map.Marker) {
                        scope.mapInfoTestWindow.setContent("<div style='width:200px' id='pan' class='panel panel-warning'>" +
                                                            "<div class='panel-heading'><h2 class='panel-title'>평화 수상 레저</h2></div>" +
                                                            "<div class='panel-body'>" +
                                                            "<div>" +
                                                            "<span class='glyphicon glyphicon-home'> 경기도 남양주시 삼봉면</span>" +
                                                            "</div>" +
                                                            "<div>" +
                                                            "<span class='glyphicon glyphicon-phone-alt'> 031-301-1526</span>" +
                                                            "</div>" +  "<div>" +
                                                            "<span > 평점 : 5접</span>" +
                                                            "</div>" +
                                                            "<div><button class='btn button-default' onclick=onDetailInfoClick();>상세보기</button></div>" +
                                                            "</div></div>");

                        scope.mapInfoTestWindow.setPoint(oTarget.getPoint());
                        scope.mapInfoTestWindow.setVisible(true);
                        scope.mapInfoTestWindow.setPosition({right : 0, top : 0});
                        scope.mapInfoTestWindow.autoPosition();
                        scope.detailInfo.title = "fdjkfj";
                        scope.detailInfo.address = "경기도 남양주시 삼봉면";
                        return;
                    }
                    var oMarker = new nhn.api.map.Marker(oIcon, { title : '마커 : ' + oPoint.toString() });
                    oMarker.setPoint(oPoint);
                    oMap.addOverlay(oMarker);

                });




            }
        }
    }).
    controller('MapController', function($scope)
    {
        $scope.geoCode = {};
        $scope.map = {};
        $scope.oLabel = {};
        $scope.mapInfoTestWindow = {};


        $scope.positionDic = [];
        $scope.detailInfo = {};

        //초기화
        $scope.initialize = function()
        {

            $scope.geoCode = new google.maps.Geocoder();

        };

        $scope.onDetailInfoClick = function()
        {
           $scope.title = "FF";
        };
        $scope.getGeoCode = function(addr, title)
        {
            $scope.geoCode.geocode( { 'address': addr}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {

                    var oSize = new nhn.api.map.Size(17, 19.5);
                    var oOffset = new nhn.api.map.Size(9, 19.5);
                    var oIcon = new nhn.api.map.Icon('http://static.naver.com/maps2/icons/pin_spot2.png', oSize, oOffset);

                    var k = results[0].geometry.location.k.toFixed(8);
                    var b = results[0].geometry.location.B.toFixed(8);
                    var oMarker = new nhn.api.map.Marker(oIcon, {
                        point : new nhn.api.map.LatLng(k, b),
                        title : title
                    });
                    $scope.map.addOverlay(oMarker);


                }

            });
        };
        // 주소를 가지고 Marker로 등록
        $scope.byGoogle_getGeoCode = function(addr, title)
        {

            $scope.geoCode.geocode( { 'address': addr}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {

                    $scope.map.setCenter(results[0].geometry.location);
                    var marker = new google.maps.Marker({
                        map: $scope.map,
                        position: results[0].geometry.location,
                        title: title
                    });

                    $scope.positionDic.push({key: addr, position:results[0].geometry.location});

                    google.maps.event.addListener(marker, 'click', function(sender, ss) {
                        angular.forEach($scope.positionDic, function(value, key)
                        {
                                if(sender.latLng.B == value.position.B && sender.latLng.K == value.position.K)
                                {
                                    alert(value.key);
                                }
                        });
                    });
                } else {
                    alert("Geocode was not successful for the following reason: " + status);
                }
            });

        };
    });

$(document).ready(function()
{

});

function onDetailInfoClick()
{
    var scope = angular.element($("#controllerLayout")).scope();
    scope.$apply(function(){
        scope.onDetailInfoClick();
    });
    $('#writeModal').modal('show');
}